<?php
header("Content-type:text/html; charset=utf-8"); 

/*信用卡支付订单返回接收页面
 *注意:由于可能多次返回支付结果,故需要商户的系统有能力处理多次返回的情况.
*/

//商户证书
$md5cert = 'gs14FHDIwYLwbc7bV3Y8fwQabe3MnOeOP618R0JLHa8DZwDaXKxvQILK112AnR57TX65AYj5JnReNmaF02O20JXhKGg0Xi7Q5bKcPhzZBSBDRGWp0MkKccgjazKTSJ8A';

//商户订单号
$pBillNo = $_GET['pBillNo'];

//商户号
$pMerCode = $_GET['pMerCode'];

//支付币种
$pCurrency = $_GET['pCurrency'];

//交易金额
$pAmount = $_GET['pAmount'];

//商户录入日期
$pDate = $_GET['pDate'];

//结果标志: Y– 成功  N – 失败 S-录入成功 F-录入失败
$pSucc = $_GET['pSucc'];

//返回的加密方式
$pRetEncodeType = $_GET['pRetEncodeType']; 

//附加信息
$pAttach = $_GET['pAttach'];

//数字签名
$pSignature = $_GET['pSignature'];

//IPS处理时间
$pIpsBankTime = $_GET['pIpsBankTime'];

//IPS订单号
$pIpsBillNo = $_GET['pIpsBillNo'];

//银行返回信息
$pMsg = $_GET['pMsg'];

//验证明文
$content = $pBillNo . $pAmount . $pDate . $pSucc . $pIpsBillNo . $pCurrency;


/********************************非直连返回处理逻辑*****************************
1.数据验证 
  可以使用IPS 提供的签名验证组件，对返回的关键信息进行验证，以确保订单信息 
  安全，防止黑客恶意攻击及篡改订单信息。
2.判断 pSucc
  若 pSucc 等“S”, 表示录入成功; 若等于“F”, 表示录入失败, 此时无需再进行以下步骤。
  若 pSucc 等“Y”, 表示支付成功; 若等于“N”, 表示支付失败。
3.判断订单号和金额 
  为安全起见，商户应该将自己系统中存放的订单信息和IPS 返回的订单信息进行比对， 
  以保证订单数据真实可信。建议比对的项：订单编号和订单金额。 
4.在成功完成以上步骤后，商户可以根据需要进行其他操作。
*******************************************************************************/
//验证结果
$verify = false;
			
//先验证签名，再判断交易是否成功
//MD5WithRSA验证
if ($pRetEncodeType == '11')
{	
	//创建com组件
	$MD5withRSA = new COM('IpsVerify.RSAMd5');
	
	//使用公钥文件的绝对路径
	$result = $MD5withRSA->VerifyMessage("C:\\PubKey\\pub.txt", $content, $pSignature);

	/*******************
	返回代码定义
	0   表示签名验证成功
	-1  表示系统错误
	-2  表示文件绑定错误
	-3  表示读取公钥失败
	-4  表示签名长度错
	-5  表示签名验证失败
	-99 表示系统锁定失败
	*******************/ 
	if ($result == 0)
	{
		$verify = true;
	}
}

//md5摘要验证  
if($pRetEncodeType == '12')
{
	//明文=订单编号+订单金额+订单日期+成功标志+IPS订单编号+币种+商户证书
	$content = $content . $md5cert;

	$signature_local = MD5($content);

	if ($signature_local == $pSignature)
	{
		$verify = true;
	}    
}

//签名验证结果
if($verify)
{
	switch($pSucc)
	{
		Case "S":
			//录入结果成功
			echo '录入成功';
			break;

		Case "F":
			//录入结果失败，商户可以记录失败原因或做其他操作
			echo '录入失败' . $pMsg;
			break;
			
		Case "Y":
			//支付结果成功，对返回的订单信息和商户数据库里的订单信息做核对--主要核对订单号，金额，日期等是否一致
			echo '支付成功';
			break;

		Case "N":
			//支付结果失败，商户可以记录失败原因或做其他操作
			echo '支付失败' . $pMsg;
			break;
	}
}
else
{
	echo '签名验证失败';
}
?>
